<!DOCTYPE HTML>
<html lang="en" class="light" dir="ltr">
    <head>
        <!-- Book generated using mdBook -->
        <meta charset="UTF-8">
        <title>NETCONF Call Home (RFC8071) - Netop Document</title>


        <!-- Custom HTML head -->
        
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="theme-color" content="#ffffff">

        <link rel="icon" href="../favicon.svg">
        <link rel="shortcut icon" href="../favicon.png">
        <link rel="stylesheet" href="../css/variables.css">
        <link rel="stylesheet" href="../css/general.css">
        <link rel="stylesheet" href="../css/chrome.css">
        <link rel="stylesheet" href="../css/print.css" media="print">

        <!-- Fonts -->
        <link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
        <link rel="stylesheet" href="../fonts/fonts.css">

        <!-- Highlight.js Stylesheets -->
        <link rel="stylesheet" href="../highlight.css">
        <link rel="stylesheet" href="../tomorrow-night.css">
        <link rel="stylesheet" href="../ayu-highlight.css">

        <!-- Custom theme stylesheets -->

    </head>
    <body class="sidebar-visible no-js">
    <div id="body-container">
        <!-- Provide site root to javascript -->
        <script>
            var path_to_root = "../";
            var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
        </script>

        <!-- Work around some values being stored in localStorage wrapped in quotes -->
        <script>
            try {
                var theme = localStorage.getItem('mdbook-theme');
                var sidebar = localStorage.getItem('mdbook-sidebar');

                if (theme.startsWith('"') && theme.endsWith('"')) {
                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
                }

                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
                }
            } catch (e) { }
        </script>

        <!-- Set the theme before any content is loaded, prevents flash -->
        <script>
            var theme;
            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
            if (theme === null || theme === undefined) { theme = default_theme; }
            var html = document.querySelector('html');
            html.classList.remove('light')
            html.classList.add(theme);
            var body = document.querySelector('body');
            body.classList.remove('no-js')
            body.classList.add('js');
        </script>

        <input type="checkbox" id="sidebar-toggle-anchor" class="hidden">

        <!-- Hide / unhide sidebar before it is displayed -->
        <script>
            var body = document.querySelector('body');
            var sidebar = null;
            var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
            if (document.body.clientWidth >= 1080) {
                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
                sidebar = sidebar || 'visible';
            } else {
                sidebar = 'hidden';
            }
            sidebar_toggle.checked = sidebar === 'visible';
            body.classList.remove('sidebar-visible');
            body.classList.add("sidebar-" + sidebar);
        </script>

        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <div class="sidebar-scrollbox">
                <ol class="chapter"><li class="chapter-item expanded "><a href="../index.html"><strong aria-hidden="true">1.</strong> 概览</a></li><li class="chapter-item expanded "><a href="../addons/index.html"><strong aria-hidden="true">2.</strong> 附录</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../addons/rfc8071.html" class="active"><strong aria-hidden="true">2.1.</strong> NETCONF Call Home (RFC8071)</a></li><li class="chapter-item expanded "><a href="../addons/rfc4742.html"><strong aria-hidden="true">2.2.</strong> NETCONF over SSH (RFC4742)</a></li><li class="chapter-item expanded "><a href="../addons/rfc6242.html"><strong aria-hidden="true">2.3.</strong> NETCONF over SSH (RFC6242)</a></li><li class="chapter-item expanded "><a href="../addons/rfc4741.html"><strong aria-hidden="true">2.4.</strong> NETCONF Protocol (RFC4741)</a></li></ol></li></ol>
            </div>
            <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                <div class="sidebar-resize-indicator"></div>
            </div>
        </nav>

        <!-- Track and set sidebar scroll position -->
        <script>
            var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
            sidebarScrollbox.addEventListener('click', function(e) {
                if (e.target.tagName === 'A') {
                    sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
                }
            }, { passive: true });
            var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
            sessionStorage.removeItem('sidebar-scroll');
            if (sidebarScrollTop) {
                // preserve sidebar scroll position when navigating via links within sidebar
                sidebarScrollbox.scrollTop = sidebarScrollTop;
            } else {
                // scroll sidebar to current active section when navigating via "next/previous chapter" buttons
                var activeSection = document.querySelector('#sidebar .active');
                if (activeSection) {
                    activeSection.scrollIntoView({ block: 'center' });
                }
            }
        </script>

        <div id="page-wrapper" class="page-wrapper">

            <div class="page">
                                <div id="menu-bar-hover-placeholder"></div>
                <div id="menu-bar" class="menu-bar sticky">
                    <div class="left-buttons">
                        <label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
                            <i class="fa fa-bars"></i>
                        </label>
                        <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
                            <i class="fa fa-paint-brush"></i>
                        </button>
                        <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
                            <li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
                        </ul>
                        <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
                            <i class="fa fa-search"></i>
                        </button>
                    </div>

                    <h1 class="menu-title">Netop Document</h1>

                    <div class="right-buttons">
                        <a href="../print.html" title="Print this book" aria-label="Print this book">
                            <i id="print-button" class="fa fa-print"></i>
                        </a>

                    </div>
                </div>

                <div id="search-wrapper" class="hidden">
                    <form id="searchbar-outer" class="searchbar-outer">
                        <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
                    </form>
                    <div id="searchresults-outer" class="searchresults-outer hidden">
                        <div id="searchresults-header" class="searchresults-header"></div>
                        <ul id="searchresults">
                        </ul>
                    </div>
                </div>

                <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
                <script>
                    document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
                    document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
                    Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
                        link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
                    });
                </script>

                <div id="content" class="content">
                    <main>
                        <p>Internet Engineering Task Force (IETF)                         K. Watsen
Request for Comments: 8071                              Juniper Networks
Category: Standards Track                                  February 2017
ISSN: 2070-1721</p>
<pre><code>            NETCONF Call Home and RESTCONF Call Home
</code></pre>
<p>Abstract</p>
<p>This RFC presents NETCONF Call Home and RESTCONF Call Home, which
enable a NETCONF or RESTCONF server to initiate a secure connection
to a NETCONF or RESTCONF client, respectively.</p>
<p>Status of This Memo</p>
<p>This is an Internet Standards Track document.</p>
<p>This document is a product of the Internet Engineering Task Force
(IETF).  It represents the consensus of the IETF community.  It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG).  Further information on
Internet Standards is available in Section 2 of RFC 7841.</p>
<p>Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc8071.</p>
<p>Copyright Notice</p>
<p>Copyright (c) 2017 IETF Trust and the persons identified as the
document authors.  All rights reserved.</p>
<p>This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document.  Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document.  Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.</p>
<p>Watsen                       Standards Track                    [Page 1]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>Table of Contents</p>
<ol>
<li>
<p>Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
1.1.  Motivation  . . . . . . . . . . . . . . . . . . . . . . .   3
1.2.  Requirements Terminology  . . . . . . . . . . . . . . . .   3
1.3.  Applicability Statement . . . . . . . . . . . . . . . . .   4
1.4.  Relation to RFC 4253  . . . . . . . . . . . . . . . . . .   4
1.5.  The NETCONF/RESTCONF Convention . . . . . . . . . . . . .   4</p>
</li>
<li>
<p>Solution Overview . . . . . . . . . . . . . . . . . . . . . .   5</p>
</li>
<li>
<p>The NETCONF or RESTCONF Client  . . . . . . . . . . . . . . .   5
3.1.  Client Protocol Operation . . . . . . . . . . . . . . . .   5
3.2.  Client Configuration Data Model . . . . . . . . . . . . .   7</p>
</li>
<li>
<p>The NETCONF or RESTCONF Server  . . . . . . . . . . . . . . .   7
4.1.  Server Protocol Operation . . . . . . . . . . . . . . . .   7
4.2.  Server Configuration Data Model . . . . . . . . . . . . .   8</p>
</li>
<li>
<p>Security Considerations . . . . . . . . . . . . . . . . . . .   9</p>
</li>
<li>
<p>IANA Considerations . . . . . . . . . . . . . . . . . . . . .  10</p>
</li>
<li>
<p>References  . . . . . . . . . . . . . . . . . . . . . . . . .  11
7.1.  Normative References  . . . . . . . . . . . . . . . . . .  11
7.2.  Informative References  . . . . . . . . . . . . . . . . .  12
Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  13
Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  13</p>
</li>
<li>
<p>Introduction</p>
</li>
</ol>
<p>This RFC presents NETCONF Call Home and RESTCONF Call Home, which
enable a NETCONF or RESTCONF server to initiate a secure connection
to a NETCONF or RESTCONF client, respectively.</p>
<p>NETCONF Call Home supports both of the secure transports used by the
Network Configuration Protocol (NETCONF) [RFC6241], Secure Shell
(SSH), and Transport Layer Security (TLS).  The NETCONF protocol's
binding to SSH is defined in [RFC6242].  The NETCONF protocol's
binding to TLS is defined in [RFC7589].</p>
<p>RESTCONF Call Home only supports TLS, the same as the RESTCONF
protocol [RFC8040].  The RESTCONF protocol's binding to TLS is
defined in [RFC8040].</p>
<p>The SSH protocol is defined in [RFC4253].  The TLS protocol is
defined in [RFC5246].  Both the SSH and TLS protocols are layered on
top of the TCP protocol, which is defined in [RFC793].</p>
<p>Both NETCONF Call Home and RESTCONF Call Home preserve all but one of
the client/server roles in their respective protocol stacks, as
compared to client-initiated NETCONF and RESTCONF connections.  The
one and only role reversal that occurs is at the TCP layer; that is,
which peer is the TCP client and which is the TCP server.</p>
<p>Watsen                       Standards Track                    [Page 2]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>For example, a network element is traditionally the TCP server.
However, when calling home, the network element initially assumes the
role of the TCP client.  The network element's secure transport-layer
roles (SSH server, TLS server) and its application-layer roles
(NETCONF server, RESTCONF server) all remain the same.</p>
<p>Having consistency in both the secure transport-layer (SSH, TLS) and
application-layer (NETCONF, RESTCONF) roles conveniently enables
deployed network management infrastructure to support call home also.
For instance, existing certificate chains and user authentication
mechanisms are unaffected by call home.</p>
<p>1.1.  Motivation</p>
<p>Call home is generally useful for both the initial deployment and
ongoing management of networking elements.  Here are some scenarios
enabled by call home:</p>
<p>o  The network element may proactively "call home" after being
powered on for the first time in order to register itself with its
management system.</p>
<p>o  The network element may access the network in a way that
dynamically assigns it an IP address, but does not register its
assigned IP address to a mapping service (e.g., dynamic DNS).</p>
<p>o  The network element may be deployed behind a firewall that
implements Network Address Translation (NAT) for all internal
network IP addresses.</p>
<p>o  The network element may be deployed behind a firewall that does
not allow any management access to the internal network.</p>
<p>o  The network element may be configured in "stealth mode", and thus
does not have any open ports for the management system to connect
to.</p>
<p>o  The operator may prefer to have network elements initiate
management connections, believing it is easier to secure one open
port in the data center than to have an open port on each network
element in the network.</p>
<p>1.2.  Requirements Terminology</p>
<p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].</p>
<p>Watsen                       Standards Track                    [Page 3]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>1.3.  Applicability Statement</p>
<p>The techniques described in this document are suitable for network
management scenarios such as the ones described in Section 1.1.
However, these techniques are only defined for NETCONF Call Home and
RESTCONF Call Home, as described in this document.</p>
<p>The reason for this restriction is that different protocols have
different security assumptions.  The NETCONF and RESTCONF protocols
require clients and servers to verify the identity of the other
party.  This requirement is specified for the NETCONF protocol in
Section 2.2 of [RFC6241], and is specified for the RESTCONF protocol
in Sections 2.4 and 2.5 of [RFC8040].</p>
<p>This contrasts with the base SSH and TLS protocols, which do not
require programmatic verification of the other party (Section 9.3.4
of [RFC4251], Section 4 of [RFC4252], and Section 7.3 of [RFC5246]).
In such circumstances, allowing the SSH/TLS server to contact the
SSH/TLS client would open new vulnerabilities.  Any use of call home
with SSH/TLS for purposes other than NETCONF or RESTCONF will need a
thorough contextual risk assessment.  A risk assessment for this RFC
is in the Security Considerations section (Section 5).</p>
<p>1.4.  Relation to RFC 4253</p>
<p>This document uses the SSH Transport Layer Protocol [RFC4253] with
the exception that the statement "The client initiates the
connection" made in Section 4 of RFC 4253 does not apply.  Assuming
the reference to the client means "SSH client" and the reference to
the connection means "TCP connection", this statement doesn't hold
true in call home, where the network element is the SSH server and
yet still initiates the TCP connection.  Security implications
related to this change are discussed in Section 5.</p>
<p>1.5.  The NETCONF/RESTCONF Convention</p>
<p>Throughout the remainder of this document, the term "NETCONF/
RESTCONF" is used as an abbreviation in place of the text "the
NETCONF or the RESTCONF".  The NETCONF/RESTCONF abbreviation is not
intended to require or to imply that a client or server must
implement both the NETCONF standard and the RESTCONF standard.</p>
<p>Watsen                       Standards Track                    [Page 4]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<ol start="2">
<li>Solution Overview</li>
</ol>
<p>The diagram below illustrates call home from a protocol-layering
perspective:</p>
<pre><code>      NETCONF/RESTCONF                    NETCONF/RESTCONF
           Server                              Client
             |                                    |
             |         1. TCP                     |
             |-----------------------------------&gt;|
             |                                    |
             |                                    |
             |         2. SSH/TLS                 |
             |&lt;-----------------------------------|
             |                                    |
             |                                    |
             |         3. NETCONF/RESTCONF        |
             |&lt;-----------------------------------|
             |                                    |
            Note: Arrows point from the "client" to
              the "server" at each protocol layer.

               Figure 1: Call Home Sequence Diagram
</code></pre>
<p>This diagram makes the following points:</p>
<ol>
<li>
<p>The NETCONF/RESTCONF server begins by initiating a TCP connection
to the NETCONF/RESTCONF client.</p>
</li>
<li>
<p>Using this TCP connection, the NETCONF/RESTCONF client initiates
an SSH/TLS session to the NETCONF/RESTCONF server.</p>
</li>
<li>
<p>Using this SSH/TLS session, the NETCONF/RESTCONF client initiates
a NETCONF/RESTCONF session to the NETCONF/RESTCONF server.</p>
</li>
<li>
<p>The NETCONF or RESTCONF Client</p>
</li>
</ol>
<p>The term "client" is defined in [RFC6241], Section 1.1.  In the
context of network management, the NETCONF/RESTCONF client might be a
network management system.</p>
<p>3.1.  Client Protocol Operation</p>
<p>C1  The NETCONF/RESTCONF client listens for TCP connection requests
from NETCONF/RESTCONF servers.  The client MUST support accepting
TCP connections on the IANA-assigned ports defined in Section 6,
but MAY be configured to listen to a different port.</p>
<p>Watsen                       Standards Track                    [Page 5]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>C2  The NETCONF/RESTCONF client accepts an incoming TCP connection
request and a TCP connection is established.</p>
<p>C3  Using this TCP connection, the NETCONF/RESTCONF client starts
either the SSH client [RFC4253] or the TLS client [RFC5246]
protocol.  For example, assuming the use of the IANA-assigned
ports, the SSH client protocol is started when the connection is
accepted on port 4334 and the TLS client protocol is started when
the connection is accepted on either port 4335 or port 4336.</p>
<p>C4  When using TLS, the NETCONF/RESTCONF client MUST advertise
"peer_allowed_to_send", as defined by [RFC6520].  This is
required so that NETCONF/RESTCONF servers can depend on it being
there for call home connections, when keep-alives are needed the
most.</p>
<p>C5  As part of establishing an SSH or TLS connection, the NETCONF/
RESTCONF client MUST validate the server's presented host key or
certificate.  This validation MAY be accomplished by certificate
path validation or by comparing the host key or certificate to a
previously trusted or "pinned" value.  If a certificate is
presented and it contains revocation-checking information, the
NETCONF/RESTCONF client SHOULD check the revocation status of the
certificate.  If it is determined that a certificate has been
revoked, the client MUST immediately close the connection.</p>
<p>C6  If certificate path validation is used, the NETCONF/RESTCONF
client MUST ensure that the presented certificate has a valid
chain of trust to a preconfigured issuer certificate, and that
the presented certificate encodes an "identifier" [RFC6125] that
the client was aware of before the connection attempt.  How
identifiers are encoded in certificates MAY be determined by a
policy associated with the certificate's issuer.  For instance, a
given issuer may be known to only sign IDevID certificates
[Std-802.1AR-2009] having a unique identifier (e.g., a serial
number) in the X.509 certificate's "CommonName" field.</p>
<p>C7  After the server's host key or certificate is validated, the SSH
or TLS protocol proceeds as normal to establish an SSH or TLS
connection.  When performing client authentication with the
NETCONF/RESTCONF server, the NETCONF/RESTCONF client MUST only
use credentials that it had previously associated for the
NETCONF/RESTCONF server's presented host key or server
certificate.</p>
<p>Watsen                       Standards Track                    [Page 6]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>C8  Once the SSH or TLS connection is established, the NETCONF/
RESTCONF client starts either the NETCONF client [RFC6241] or
RESTCONF client [RFC8040] protocol.  Assuming the use of the
IANA-assigned ports, the NETCONF client protocol is started when
the connection is accepted on either port 4334 or port 4335 and
the RESTCONF client protocol is started when the connection is
accepted on port 4336.</p>
<p>3.2.  Client Configuration Data Model</p>
<p>How a NETCONF or RESTCONF client is configured is outside the scope
of this document.  For instance, such a configuration might be used
to enable listening for call home connections, configuring trusted
certificate issuers, or configuring identifiers for expected
connections.  That said, YANG [RFC7950] data modules for configuring
NETCONF and RESTCONF clients, including call home, are provided in
[NETCONF-MODELS] and [RESTCONF-MODELS].</p>
<ol start="4">
<li>The NETCONF or RESTCONF Server</li>
</ol>
<p>The term "server" is defined in [RFC6241], Section 1.1.  In the
context of network management, the NETCONF/RESTCONF server might be a
network element or a device.</p>
<p>4.1.  Server Protocol Operation</p>
<p>S1  The NETCONF/RESTCONF server initiates a TCP connection request to
the NETCONF/RESTCONF client.  The source port may be per local
policy or randomly assigned by the operating system.  The server
MUST support connecting to one of the IANA-assigned ports defined
in Section 6, but MAY be configured to connect to a different
port.  Using the IANA-assigned ports, the server connects to port
4334 for NETCONF over SSH, port 4335 for NETCONF over TLS, and
port 4336 for RESTCONF over TLS.</p>
<p>S2  The TCP connection request is accepted and a TCP connection is
established.</p>
<p>S3  Using this TCP connection, the NETCONF/RESTCONF server starts
either the SSH server [RFC4253] or the TLS server [RFC5246]
protocol, depending on how it is configured.  For example,
assuming the use of the IANA-assigned ports, the SSH server
protocol is used after connecting to the remote port 4334 and the
TLS server protocol is used after connecting to either remote
port 4335 or remote port 4336.</p>
<p>Watsen                       Standards Track                    [Page 7]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>S4  As part of establishing the SSH or TLS connection, the NETCONF/
RESTCONF server will send its host key or certificate to the
client.  If a certificate is sent, the server MUST also send all
intermediate certificates leading up to a well-known and trusted
issuer.  How to send a list of certificates is defined for SSH in
[RFC6187], Section 2.1, and for TLS in [RFC5246], Section 7.4.2.</p>
<p>S5  Establishing an SSH or TLS session requires server authentication
of client credentials in all cases except with RESTCONF, where
some client authentication schemes occur after the secure
transport connection (TLS) has been established.  If transport-
level (SSH or TLS) client authentication is required, and the
client is unable to successfully authenticate itself to the
server in an amount of time defined by local policy, the server
MUST close the connection.</p>
<p>S6  Once the SSH or TLS connection is established, the NETCONF/
RESTCONF server starts either the NETCONF server [RFC6241] or
RESTCONF server [RFC8040] protocol, depending on how it is
configured.  Assuming the use of the IANA-assigned ports, the
NETCONF server protocol is used after connecting to remote port
4334 or remote port 4335, and the RESTCONF server protocol is
used after connecting to remote port 4336.</p>
<p>S7  If a persistent connection is desired, the NETCONF/RESTCONF
server, as the connection initiator, SHOULD actively test the
aliveness of the connection using a keep-alive mechanism.  For
TLS-based connections, the NETCONF/RESTCONF server SHOULD send
HeartbeatRequest messages, as defined by [RFC6520].  For SSH-
based connections, per Section 4 of [RFC4254], the server SHOULD
send an SSH_MSG_GLOBAL_REQUEST message with a purposely
nonexistent "request name" value (e.g., keepalive@ietf.org) and
the "want reply" value set to '1'.</p>
<p>4.2.  Server Configuration Data Model</p>
<p>How a NETCONF or RESTCONF server is configured is outside the scope
of this document.  This includes configuration that might be used to
specify hostnames, IP addresses, ports, algorithms, or other relevant
parameters.  That said, YANG [RFC7950] data modules for configuring
NETCONF and RESTCONF servers, including call home, are provided in
[NETCONF-MODELS] and [RESTCONF-MODELS].</p>
<p>Watsen                       Standards Track                    [Page 8]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<ol start="5">
<li>Security Considerations</li>
</ol>
<p>The security considerations described in [RFC6242] and [RFC7589], and
by extension [RFC4253], [RFC5246], and [RFC8040] apply here as well.</p>
<p>This RFC deviates from standard SSH and TLS usage by having the SSH/
TLS server initiate the underlying TCP connection.  This reversal is
incongruous with [RFC4253], which says "the client initiates the
connection" and also [RFC6125], which says "the client MUST construct
a list of acceptable reference identifiers, and MUST do so
independently of the identifiers presented by the service."</p>
<p>Risks associated with these variances are centered around server
authentication and the inability for clients to compare an
independently constructed reference identifier to one presented by
the server.  To mitigate against these risks, this RFC requires that
the NETCONF/RESTCONF client validate the server's SSH host key or
certificate, by certificate path validation to a preconfigured issuer
certificate, or by comparing the host key or certificate to a
previously trusted or "pinned" value.  Furthermore, when a
certificate is used, this RFC requires that the client be able to
match an identifier encoded in the presented certificate with an
identifier the client was preconfigured to expect (e.g., a serial
number).</p>
<p>For cases when the NETCONF/RESTCONF server presents an X.509
certificate, NETCONF/RESTCONF clients should ensure that the
preconfigured issuer certificate used for certificate path validation
is unique to the manufacturer of the server.  That is, the
certificate should not belong to a third-party certificate authority
that might issue certificates for more than one manufacturer.  This
is especially important when a client authentication mechanism
passing a shared secret (e.g., a password) to the server is used.
Not doing so could otherwise lead to a case where the client sends
the shared secret to another server that happens to have the same
identity (e.g., a serial number) as the server the client was
configured to expect.</p>
<p>Considerations not associated with server authentication follow next.</p>
<p>Internet-facing hosts running NETCONF Call Home or RESTCONF Call Home
will be fingerprinted via scanning tools such as "zmap" [zmap].  Both
SSH and TLS provide many ways in which a host can be fingerprinted.
SSH and TLS servers are fairly mature and able to withstand attacks,
but SSH and TLS clients may not be as robust.  Implementers and
deployments need to ensure that software update mechanisms are
provided so that vulnerabilities can be fixed in a timely fashion.</p>
<p>Watsen                       Standards Track                    [Page 9]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>An attacker could launch a denial-of-service (DoS) attack on the
NETCONF/RESTCONF client by having it perform computationally
expensive operations, before deducing that the attacker doesn't
possess a valid key.  For instance, in TLS 1.3 [TLS1.3], the
ClientHello message contains a Key Share value based on an expensive
asymmetric key operation.  Common precautions mitigating DoS attacks
are recommended, such as temporarily blacklisting the source address
after a set number of unsuccessful login attempts.</p>
<p>When using call home with the RESTCONF protocol, special care is
required when using some HTTP authentication schemes, especially the
Basic [RFC7617] and Digest [RFC7616] schemes, which convey a shared
secret (e.g., a password).  Implementers and deployments should be
sure to review the Security Considerations section in the RFC for any
HTTP client authentication scheme used.</p>
<ol start="6">
<li>IANA Considerations</li>
</ol>
<p>IANA has assigned three TCP port numbers in the "User Ports" range
with the service names "netconf-ch-ssh", "netconf-ch-tls", and
"restconf-ch-tls".  These ports will be the default ports for NETCONF
Call Home and RESTCONF Call Home protocols.  Below is the
registration template following the rules in [RFC6335].</p>
<p>Service Name:           netconf-ch-ssh
Port Number:            4334
Transport Protocol(s):  TCP
Description:            NETCONF Call Home (SSH)
Assignee:               IESG <a href="mailto:iesg@ietf.org">iesg@ietf.org</a>
Contact:                IETF Chair <a href="mailto:chair@ietf.org">chair@ietf.org</a>
Reference:              RFC 8071</p>
<p>Service Name:           netconf-ch-tls
Port Number:            4335
Transport Protocol(s):  TCP
Description:            NETCONF Call Home (TLS)
Assignee:               IESG <a href="mailto:iesg@ietf.org">iesg@ietf.org</a>
Contact:                IETF Chair <a href="mailto:chair@ietf.org">chair@ietf.org</a>
Reference:              RFC 8071</p>
<p>Service Name:           restconf-ch-tls
Port Number:            4336
Transport Protocol(s):  TCP
Description:            RESTCONF Call Home (TLS)
Assignee:               IESG <a href="mailto:iesg@ietf.org">iesg@ietf.org</a>
Contact:                IETF Chair <a href="mailto:chair@ietf.org">chair@ietf.org</a>
Reference:              RFC 8071</p>
<p>Watsen                       Standards Track                   [Page 10]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<ol start="7">
<li>References</li>
</ol>
<p>7.1.  Normative References</p>
<p>[RFC793]   Postel, J., "Transmission Control Protocol", STD 7,
RFC 793, DOI 10.17487/RFC0793, September 1981,
<a href="http://www.rfc-editor.org/info/rfc793">http://www.rfc-editor.org/info/rfc793</a>.</p>
<p>[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<a href="http://www.rfc-editor.org/info/rfc2119">http://www.rfc-editor.org/info/rfc2119</a>.</p>
<p>[RFC4251]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Protocol Architecture", RFC 4251, DOI 10.17487/RFC4251,
January 2006, <a href="http://www.rfc-editor.org/info/rfc4251">http://www.rfc-editor.org/info/rfc4251</a>.</p>
<p>[RFC4252]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252,
January 2006, <a href="http://www.rfc-editor.org/info/rfc4252">http://www.rfc-editor.org/info/rfc4252</a>.</p>
<p>[RFC4253]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253,
January 2006, <a href="http://www.rfc-editor.org/info/rfc4253">http://www.rfc-editor.org/info/rfc4253</a>.</p>
<p>[RFC4254]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
Connection Protocol", RFC 4254, DOI 10.17487/RFC4254,
January 2006, <a href="http://www.rfc-editor.org/info/rfc4254">http://www.rfc-editor.org/info/rfc4254</a>.</p>
<p>[RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008,
<a href="http://www.rfc-editor.org/info/rfc5246">http://www.rfc-editor.org/info/rfc5246</a>.</p>
<p>[RFC6125]  Saint-Andre, P. and J. Hodges, "Representation and
Verification of Domain-Based Application Service Identity
within Internet Public Key Infrastructure Using X.509
(PKIX) Certificates in the Context of Transport Layer
Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March
2011, <a href="http://www.rfc-editor.org/info/rfc6125">http://www.rfc-editor.org/info/rfc6125</a>.</p>
<p>[RFC6187]  Igoe, K. and D. Stebila, "X.509v3 Certificates for Secure
Shell Authentication", RFC 6187, DOI 10.17487/RFC6187,
March 2011, <a href="http://www.rfc-editor.org/info/rfc6187">http://www.rfc-editor.org/info/rfc6187</a>.</p>
<p>Watsen                       Standards Track                   [Page 11]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>[RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<a href="http://www.rfc-editor.org/info/rfc6241">http://www.rfc-editor.org/info/rfc6241</a>.</p>
<p>[RFC6242]  Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<a href="http://www.rfc-editor.org/info/rfc6242">http://www.rfc-editor.org/info/rfc6242</a>.</p>
<p>[RFC6335]  Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S.
Cheshire, "Internet Assigned Numbers Authority (IANA)
Procedures for the Management of the Service Name and
Transport Protocol Port Number Registry", BCP 165,
RFC 6335, DOI 10.17487/RFC6335, August 2011,
<a href="http://www.rfc-editor.org/info/rfc6335">http://www.rfc-editor.org/info/rfc6335</a>.</p>
<p>[RFC6520]  Seggelmann, R., Tuexen, M., and M. Williams, "Transport
Layer Security (TLS) and Datagram Transport Layer Security
(DTLS) Heartbeat Extension", RFC 6520,
DOI 10.17487/RFC6520, February 2012,
<a href="http://www.rfc-editor.org/info/rfc6520">http://www.rfc-editor.org/info/rfc6520</a>.</p>
<p>[RFC7589]  Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the
NETCONF Protocol over Transport Layer Security (TLS) with
Mutual X.509 Authentication", RFC 7589,
DOI 10.17487/RFC7589, June 2015,
<a href="http://www.rfc-editor.org/info/rfc7589">http://www.rfc-editor.org/info/rfc7589</a>.</p>
<p>[RFC8040]  Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<a href="http://www.rfc-editor.org/info/rfc8040">http://www.rfc-editor.org/info/rfc8040</a>.</p>
<p>7.2.  Informative References</p>
<p>[NETCONF-MODELS]
Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client
and Server Models", Work in Progress, draft-ietf-netconf-
netconf-client-server-01, November 2016.</p>
<p>[RESTCONF-MODELS]
Watsen, K. and J. Schoenwaelder, "RESTCONF Client and
Server Models", Work in Progress draft-ietf-netconf-
restconf-client-server-01, November 2016.</p>
<p>[RFC7616]  Shekh-Yusef, R., Ed., Ahrens, D., and S. Bremer, "HTTP
Digest Access Authentication", RFC 7616,
DOI 10.17487/RFC7616, September 2015,
<a href="http://www.rfc-editor.org/info/rfc7616">http://www.rfc-editor.org/info/rfc7616</a>.</p>
<p>Watsen                       Standards Track                   [Page 12]

RFC 8071        NETCONF Call Home and RESTCONF Call Home   February 2017</p>
<p>[RFC7617]  Reschke, J., "The 'Basic' HTTP Authentication Scheme",
RFC 7617, DOI 10.17487/RFC7617, September 2015,
<a href="http://www.rfc-editor.org/info/rfc7617">http://www.rfc-editor.org/info/rfc7617</a>.</p>
<p>[RFC7950]  Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016,
<a href="http://www.rfc-editor.org/info/rfc7950">http://www.rfc-editor.org/info/rfc7950</a>.</p>
<p>[Std-802.1AR-2009]
IEEE, "IEEE Standard for Local and metropolitan area
networks - Secure Device Identity", IEEE Std 802.1AR-2009,
DOI 10.1109/IEEESTD.2009.5367679, December 2009,
&lt;http://standards.ieee.org/findstds/
standard/802.1AR-2009.html&gt;.</p>
<p>[TLS1.3]   Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", Work in Progress, draft-ietf-tls-tls13-18,
October 2016.</p>
<p>[zmap]     Durumeric, Z., Wustrow, E., and J. Halderman, "ZMap: Fast
Internet-Wide Scanning and its Security Applications",
22nd Usenix Security Symposium, August 2013,
<a href="https://zmap.io/paper.html">https://zmap.io/paper.html</a>.</p>
<p>Acknowledgements</p>
<p>The author would like to thank the following (ordered by last name)
for lively discussions on the mailing list and in the halls: Jari
Arkko, Andy Bierman, Martin Bjorklund, Ben Campbell, Spencer Dawkins,
Mehmet Ersue, Stephen Farrell, Wes Hardaker, Stephen Hanna, David
Harrington, Jeffrey Hutzelman, Simon Josefsson, Radek Krejci, Suresh
Krishnan, Barry Leiba, Alan Luchuk, Kathleen Moriarty, Mouse, Russ
Mundy, Tom Petch, Peter Saint-Andre, Joseph Salowey, Juergen
Schoenwaelder, Martin Stiemerling, Joe Touch, Hannes Tschofenig, Sean
Turner, and Bert Wijnen.</p>
<p>Author's Address</p>
<p>Kent Watsen
Juniper Networks</p>
<p>Email: kwatsen@juniper.net</p>
<p>Watsen                       Standards Track                   [Page 13]
</p>

                    </main>

                    <nav class="nav-wrapper" aria-label="Page navigation">
                        <!-- Mobile navigation buttons -->
                            <a rel="prev" href="../addons/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                                <i class="fa fa-angle-left"></i>
                            </a>

                            <a rel="next prefetch" href="../addons/rfc4742.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                                <i class="fa fa-angle-right"></i>
                            </a>

                        <div style="clear: both"></div>
                    </nav>
                </div>
            </div>

            <nav class="nav-wide-wrapper" aria-label="Page navigation">
                    <a rel="prev" href="../addons/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                        <i class="fa fa-angle-left"></i>
                    </a>

                    <a rel="next prefetch" href="../addons/rfc4742.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                        <i class="fa fa-angle-right"></i>
                    </a>
            </nav>

        </div>

        <!-- Livereload script (if served using the cli tool) -->
        <script>
            const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
            const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
            const socket = new WebSocket(wsAddress);
            socket.onmessage = function (event) {
                if (event.data === "reload") {
                    socket.close();
                    location.reload();
                }
            };

            window.onbeforeunload = function() {
                socket.close();
            }
        </script>



        <script>
            window.playground_copyable = true;
        </script>


        <script src="../elasticlunr.min.js"></script>
        <script src="../mark.min.js"></script>
        <script src="../searcher.js"></script>

        <script src="../clipboard.min.js"></script>
        <script src="../highlight.js"></script>
        <script src="../book.js"></script>

        <!-- Custom JS scripts -->


    </div>
    </body>
</html>
